package reesoft.common.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 公用加/解密、编/解码单元
 *
 * Created by reesoft on 2017-08-11
 */
public class EncryptUtil
{
    private static MessageDigest md5MessageDigest = null;

    /**
     * 计算字符串的 MD5 摘要码
     *
     * @param data 要计算摘要码的数据
     * @return 数据的 MD5 摘要码（小写）
     */
    public static String calculateMd5(final String data)
    {
        String output = null;

        try
        {
            if (md5MessageDigest == null)
            {
                md5MessageDigest = MessageDigest.getInstance("MD5");
            }

            output = ConvertUtil.toHexString(md5MessageDigest.digest(data.getBytes()));
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }

        return output;
    }

    /**
     * 按 UTF-8 字符集对字符串进行 URL 编码
     *
     * @param data 要编码的字符串
     * @return 编码后的字符串
     */
    public static String urlEncode(final String data)
    {
        if (StringUtil.isEmpty(data))
        {
            return data;
        }

        try
        {
            return URLEncoder.encode(data, "UTF-8");
        }
        catch (UnsupportedEncodingException e)
        {
            return data;
        }
    }

    /**
     * 按 UTF-8 字符集对字符串进行 URL 解码
     *
     * @param data 要解码的字符串
     * @return 解码后的字符串
     */
    public static String urlDecode(final String data)
    {
        if (StringUtil.isEmpty(data))
        {
            return data;
        }

        try
        {
            return URLDecoder.decode(data, "UTF-8");
        }
        catch (UnsupportedEncodingException e)
        {
            return data;
        }
    }
}
